<pre>
CORE PYTHON APPLICATIONS PROGRAMMING
    3rd Edition, by Wesley J. Chun
    ISBN-13: 978-0-13-267820-9
    ISBN-10: 0-13-267820-9

These directories contain all of the source code for the
applications in the book.

Also be sure to check out the COLOPHON.txt, COPYRIGHT.txt,
and LICENSE.txt files.  The "ls-lFR.txt" file contains a
fully-recursive directory listing.  The "all.zip" and
"all.tgz" files represent snapshots of everything here.

All source code under Creative Commons Attribution-SharedAlike3.0
License: http://creativecommons.org/licenses/by-sa/3.0/

Note that all the files have CR-LF line terminators so they're
readable on PCs running Windows. If you're running POSIX (Linux,
Mac OS X, etc.) run dos2unix or use your favorite editor to
strip the CRs.

$ ls -lR
.:
total 60
drwxr-xr-x 2 wesc wesc 4096 Feb 27 13:02 ch01
drwxr-xr-x 2 wesc wesc 4096 Feb 25 02:32 ch02
drwxr-xr-x 2 wesc wesc 4096 Feb 27 13:06 ch03
drwxr-xr-x 2 wesc wesc 4096 Feb 27 13:09 ch04
drwxr-xr-x 2 wesc wesc 4096 Feb 28 02:52 ch05
drwxr-xr-x 2 wesc wesc 4096 Feb 27 14:35 ch06
drwxr-xr-x 2 wesc wesc 4096 Feb 28 02:52 ch07
drwxr-xr-x 3 wesc wesc 4096 Feb 27 01:51 ch08
drwxr-xr-x 2 wesc wesc 4096 Feb 27 14:48 ch09
drwxr-xr-x 2 wesc wesc 4096 Feb 29 01:49 ch10
drwxr-xr-x 4 wesc wesc 4096 Feb 29 23:35 ch11
drwxr-xr-x 2 wesc wesc 4096 Feb 29 01:50 ch12
drwxr-xr-x 2 wesc wesc 4096 Feb 29 22:05 ch13
drwxr-xr-x 2 wesc wesc 4096 Feb 29 22:05 ch14
drwxr-xr-x 2 wesc wesc 4096 Feb 29 22:07 ch15
-rw-r--r-- 1 wesc wesc    0 Mar  1 00:03 README.html

./ch01:
total 40
-rwxr-xr-x 1 wesc wesc 643 Feb 25 02:06 gendata3.py
-rwxr-xr-x 1 wesc wesc 591 Feb 25 02:08 gendata-64b.py
-rwxr-xr-x 1 wesc wesc 620 Feb 25 02:08 gendata.py
-rwxr-xr-x 1 wesc wesc 745 Feb 25 02:12 gendataU.py
-rw-r--r-- 1 wesc wesc 347 Feb 25 02:31 README.html
-rwxr-xr-x 1 wesc wesc 236 Feb 23 23:05 retasklist.py
-rwxr-xr-x 1 wesc wesc 209 Feb 25 02:11 rewho3-hacker.py
-rwxr-xr-x 1 wesc wesc 162 Feb 23 22:51 rewho3.py
-rwxr-xr-x 1 wesc wesc 157 Feb 23 22:49 rewho.py
-rwxr-xr-x 1 wesc wesc 205 Feb 23 23:01 rewhoU.py

./ch02:
total 60
-rw-r--r-- 1 wesc wesc 452 Feb 25 02:32 README.html
-rwxr-xr-x 1 wesc wesc 429 Sep 11  2010 tsTclnt3.py
-rwxr-xr-x 1 wesc wesc 424 Sep 11  2010 tsTclnt3V6.py
-rwxr-xr-x 1 wesc wesc 400 Sep 11  2010 tsTclnt.py
-rwxr-xr-x 1 wesc wesc 413 Sep 11  2010 tsTclntSS.py
-rwxr-xr-x 1 wesc wesc 724 Sep 11  2010 tsTclntTW.py
-rwxr-xr-x 1 wesc wesc 395 Sep 11  2010 tsTclntV6.py
-rwxr-xr-x 1 wesc wesc 665 Sep 11  2010 tsTserv3.py
-rwxr-xr-x 1 wesc wesc 666 Sep 11  2010 tsTserv3V6.py
-rwxr-xr-x 1 wesc wesc 560 Mar 18  2009 tsTserv.py
-rwxr-xr-x 1 wesc wesc 492 Mar 18  2009 tsTservSS.py
-rwxr-xr-x 1 wesc wesc 535 Sep 11  2010 tsTservTW.py
-rwxr-xr-x 1 wesc wesc 561 Sep 11  2010 tsTservV6.py
-rwxr-xr-x 1 wesc wesc 391 Sep 11  2010 tsUclnt.py
-rwxr-xr-x 1 wesc wesc 431 Mar 18  2009 tsUserv.py

./ch03:
total 36
-rwxr-xr-x 1 wesc wesc 1342 Feb 25 02:44 email-examples.py
-rwxr-xr-x 1 wesc wesc 2390 Feb 27 13:02 getFirstNNTP3.py
-rwxr-xr-x 1 wesc wesc 2367 Sep 12  2010 getFirstNNTP.py
-rwxr-xr-x 1 wesc wesc 1129 Feb 27 13:03 getLatestFTP3.py
-rwxr-xr-x 1 wesc wesc 1119 Feb 27 13:03 getLatestFTP.py
-rwxr-xr-x 1 wesc wesc 2217 Feb 25 02:50 gmail.py
-rwxr-xr-x 1 wesc wesc  728 Feb 25 02:40 myMail.py
-rw-r--r-- 1 wesc wesc  430 Feb 25 02:52 README.html
-rwxr-xr-x 1 wesc wesc 2290 Feb 25 02:49 ymail.py

./ch04:
total 104
-rwxr-xr-x 1 wesc wesc  861 Feb 27 13:09 bookrank3CF.py
-rwxr-xr-x 1 wesc wesc  977 Feb 27 13:09 bookrank3.py
-rwxr-xr-x 1 wesc wesc  951 Feb 27 13:09 bookrank.py
-rwxr-xr-x 1 wesc wesc 1252 Apr  5  2011 candy3.py
-rwxr-xr-x 1 wesc wesc 1229 Apr  5  2011 candy.py
-rwxr-xr-x 1 wesc wesc 1016 Sep 12  2010 mtfacfib3.py
-rwxr-xr-x 1 wesc wesc  994 Nov 16 05:31 mtfacfib.py
-rwxr-xr-x 1 wesc wesc  515 Feb 27 13:07 mtsleepA3.py
-rwxr-xr-x 1 wesc wesc  506 Sep 20  2006 mtsleepA.py
-rwxr-xr-x 1 wesc wesc  732 Feb 27 13:07 mtsleepB3.py
-rwxr-xr-x 1 wesc wesc  719 Sep 12  2010 mtsleepB.py
-rwxr-xr-x 1 wesc wesc  726 Feb 27 13:07 mtsleepC3.py
-rwxr-xr-x 1 wesc wesc  716 Sep 12  2010 mtsleepC.py
-rwxr-xr-x 1 wesc wesc  978 Feb 27 13:08 mtsleepD3.py
-rwxr-xr-x 1 wesc wesc  968 Sep 12  2010 mtsleepD.py
-rwxr-xr-x 1 wesc wesc  897 Feb 27 13:08 mtsleepE3.py
-rwxr-xr-x 1 wesc wesc  872 Mar 27  2011 mtsleepE.py
-rwxr-xr-x 1 wesc wesc 1121 Apr  4  2011 mtsleepF3.py
-rwxr-xr-x 1 wesc wesc 1118 Apr  4  2011 mtsleepF.py
-rwxr-xr-x 1 wesc wesc  589 Sep 12  2010 myThread3.py
-rwxr-xr-x 1 wesc wesc  587 Sep 12  2010 myThread.py
-rwxr-xr-x 1 wesc wesc  423 Sep 12  2010 onethr3.py
-rwxr-xr-x 1 wesc wesc  423 Sep 20  2006 onethr.py
-rwxr-xr-x 1 wesc wesc 1039 Sep 11  2010 prodcons3.py
-rwxr-xr-x 1 wesc wesc 1027 Sep 11  2010 prodcons.py
-rw-r--r-- 1 wesc wesc  673 Feb 25 03:02 README.html

./ch05:
total 84
-rwxr-xr-x 1 wesc wesc 1575 Feb 27 14:28 animalGtk.pyw
-rwxr-xr-x 1 wesc wesc  675 Feb 27 14:28 animalPmw3.pyw
-rwxr-xr-x 1 wesc wesc  675 Feb 27 14:28 animalPmw.pyw
-rwxr-xr-x 1 wesc wesc  641 Feb 27 14:29 animalTix3.pyw
-rwxr-xr-x 1 wesc wesc  633 Feb 27 14:29 animalTix.pyw
-rwxr-xr-x 1 wesc wesc  606 Apr 12  2011 animalTtk3.pyw
-rwxr-xr-x 1 wesc wesc  597 Apr 12  2011 animalTtk.pyw
-rwxr-xr-x 1 wesc wesc 1388 Feb 27 14:27 animalWx.pyw
-rwxr-xr-x 1 wesc wesc 3454 Feb 27 14:30 listdir3.py
-rwxr-xr-x 1 wesc wesc 3454 Feb 27 14:30 listdir.py
-rwxr-xr-x 1 wesc wesc 1169 Feb 27 14:34 pfaGUI3.py
-rwxr-xr-x 1 wesc wesc 1163 Feb 26 23:54 pfaGUI.py
-rw-r--r-- 1 wesc wesc  886 Feb 27 00:06 README.html
-rwxr-xr-x 1 wesc wesc  146 Feb 27 14:26 tkhelloA3.py
-rwxr-xr-x 1 wesc wesc  146 Sep 21  2000 tkhelloA.py
-rwxr-xr-x 1 wesc wesc  168 Feb 27 14:27 tkhelloB3.py
-rwxr-xr-x 1 wesc wesc  168 Sep 21  2000 tkhelloB.py
-rwxr-xr-x 1 wesc wesc  273 Feb 27 14:27 tkhelloC3.py
-rwxr-xr-x 1 wesc wesc  273 Sep 20  2006 tkhelloC.py
-rwxr-xr-x 1 wesc wesc  550 Feb 27 14:27 tkhelloD3.py
-rwxr-xr-x 1 wesc wesc  550 Sep 21  2000 tkhelloD.py

./ch06:
total 32
-rw-r--r-- 1 wesc wesc  337 Feb 27 01:51 README.html
-rw-r--r-- 1 wesc wesc 4680 Sep 10 13:32 ushuffle_db.py
-rw-r--r-- 1 wesc wesc 5389 Feb 27 14:35 ushuffle_dbU.py
-rw-r--r-- 1 wesc wesc 2169 Sep 10 02:55 ushuffle_mongo.py
-rw-r--r-- 1 wesc wesc 3474 Feb 12 02:48 ushuffle_sad.py
-rw-r--r-- 1 wesc wesc 2832 Sep 10 16:33 ushuffle_so.py

./ch07:
total 52
-rwxr-xr-x 1 wesc wesc 1424 Feb 27 14:40 estock3.pyw
-rwxr-xr-x 1 wesc wesc 1404 Feb 27 14:40 estock.pyw
-rwxr-xr-x 1 wesc wesc  754 Feb 27 14:40 excel3.pyw
-rwxr-xr-x 1 wesc wesc  741 Feb 27 14:40 excel.pyw
-rwxr-xr-x 1 wesc wesc  908 Feb 27 14:44 olook3.pyw
-rwxr-xr-x 1 wesc wesc  896 Feb 27 14:44 olook.pyw
-rwxr-xr-x 1 wesc wesc 1141 Feb 27 01:46 outlook_edit.pyw
-rwxr-xr-x 1 wesc wesc  874 Feb 27 14:45 ppoint3.pyw
-rwxr-xr-x 1 wesc wesc  862 Feb 27 14:44 ppoint.pyw
-rw-r--r-- 1 wesc wesc  437 Feb 27 01:51 README.html
-rwxr-xr-x 1 wesc wesc 3098 Apr 20  2011 txt2ppt.pyw
-rwxr-xr-x 1 wesc wesc  764 Feb 27 14:45 word3.pyw
-rwxr-xr-x 1 wesc wesc  752 Feb 27 14:45 word.pyw

./ch08:
total 16
-rw-r--r-- 1 wesc wesc  891 Sep 20  2006 Extest1.c
-rw-r--r-- 1 wesc wesc 1713 Sep 20  2006 Extest2.c
-rw-r--r-- 1 wesc wesc  272 Feb 27 01:51 README.html
-rwxr-xr-x 1 wesc wesc  164 Apr 30  2006 setup.py

./ch09:
total 40
-rwxr-xr-x 1 wesc wesc 4180 Feb 27 14:47 crawl3.py
-rwxr-xr-x 1 wesc wesc 3986 Feb 27 04:31 crawl.py
-rwxr-xr-x 1 wesc wesc 2366 Feb 27 14:47 mech.py
-rwxr-xr-x 1 wesc wesc  851 Feb 27 14:46 myhttpd3.py
-rwxr-xr-x 1 wesc wesc  851 May 22  2011 myhttpd.py
-rwxr-xr-x 1 wesc wesc 2016 Feb 27 04:32 parse_links.py
-rw-r--r-- 1 wesc wesc  372 Feb 27 04:35 README.html
-rwxr-xr-x 1 wesc wesc  940 Feb 27 14:47 urlopen_auth3.py
-rwxr-xr-x 1 wesc wesc  853 Feb 27 14:48 urlopen_auth.py

./ch10:
total 52
-rwxr-xr-x 1 wesc wesc 6218 Feb 27 12:58 advcgi3.py
-rwxr-xr-x 1 wesc wesc 6070 Aug 30  2011 advcgi.py
-rwxr-xr-x 1 wesc wesc  400 Feb 27 12:59 friendsA3.py
-rwxr-xr-x 1 wesc wesc  399 Dec 30  2000 friendsA.py
-rwxr-xr-x 1 wesc wesc 1449 Feb 27 13:00 friendsB3.py
-rwxr-xr-x 1 wesc wesc 1446 Aug 28  2011 friendsB.py
-rwxr-xr-x 1 wesc wesc 2295 Feb 27 13:00 friendsC3.py
-rwxr-xr-x 1 wesc wesc 2283 Aug 28  2011 friendsC.py
-rw-r--r-- 1 wesc wesc  570 Aug 26  2011 friends.htm
-rw-r--r-- 1 wesc wesc  361 Feb 27 04:36 README.html
-rwxr-xr-x 1 wesc wesc  392 Feb 27 13:01 uniCGI.py

./ch11:
total 12
drwxr-xr-x 5 wesc wesc 4096 Feb 29 21:06 myproject
drwxr-xr-x 3 wesc wesc 4096 Feb 29 20:06 mysite
-rw-r--r-- 1 wesc wesc 1075 Feb 29 23:35 README.html

./ch11/myproject:
total 32
drwxr-xr-x 2 wesc wesc 4096 Feb 29 21:08 approver
-rw-r--r-- 1 wesc wesc    0 Jan 11  2011 __init__.py
-rw-r--r-- 1 wesc wesc  546 Jan 11  2011 manage.py
drwxr-xr-x 2 wesc wesc 4096 Feb 29 23:23 poster
-rw-r--r-- 1 wesc wesc 2977 Feb 29 21:01 settings-alt.py
-rw-r--r-- 1 wesc wesc 5317 Feb 28 02:51 settings.py
drwxr-xr-x 2 wesc wesc 4096 Jan  5 02:30 templates
-rw-r--r-- 1 wesc wesc  596 Feb 29 21:05 urls.py

./ch11/myproject/approver:
total 16
-rw-r--r-- 1 wesc wesc    0 Jan 11  2011 __init__.py
-rw-r--r-- 1 wesc wesc   57 Jan 11  2011 models.py
-rw-r--r-- 1 wesc wesc  514 Jan 11  2011 tests.py
-rw-r--r-- 1 wesc wesc  174 Jan 11  2011 urls.py
-rw-r--r-- 1 wesc wesc 3810 Jan 30 02:46 views.py

./ch11/myproject/poster:
total 20
-rw-r--r-- 1 wesc wesc  111 Dec  5  2010 admin.py
-rw-r--r-- 1 wesc wesc    0 Dec  4  2010 __init__.py
-rw-r--r-- 1 wesc wesc  878 Jan 30 01:47 models.py
-rw-r--r-- 1 wesc wesc  514 Dec  4  2010 tests.py
-rw-r--r-- 1 wesc wesc  200 Dec 22  2010 urls.py
-rw-r--r-- 1 wesc wesc 1694 Feb 29 23:22 views.py

./ch11/myproject/templates:
total 20
-rw-r--r-- 1 wesc wesc 1227 Dec  5  2010 list_tweets.html
-rw-r--r-- 1 wesc wesc  531 Dec 20  2010 login.html
-rw-r--r-- 1 wesc wesc  237 Dec  5  2010 post_tweet.html
-rw-r--r-- 1 wesc wesc  920 Dec  5  2010 review_tweet.html
-rw-r--r-- 1 wesc wesc  376 Dec  4  2010 thank_you.html

./ch11/mysite:
total 20
drwxr-xr-x 3 wesc wesc 4096 Feb 29 20:07 blog
-rw-r--r-- 1 wesc wesc    0 Dec  7  2010 __init__.py
-rw-r--r-- 1 wesc wesc  557 Dec 19  2010 manage.py
-rw-r--r-- 1 wesc wesc 4830 Feb 28 02:49 settings.py
-rw-r--r-- 1 wesc wesc  466 Dec 17  2010 urls.py

./ch11/mysite/blog:
total 24
-rw-r--r-- 1 wesc wesc  192 Dec 16  2010 admin.py
-rw-r--r-- 1 wesc wesc    0 Dec  8  2010 __init__.py
-rw-r--r-- 1 wesc wesc  374 Feb 29 19:56 models.py
drwxr-xr-x 2 wesc wesc 4096 Feb 29 20:04 templates
-rw-r--r-- 1 wesc wesc 1205 Jan 30 01:05 tests.py
-rw-r--r-- 1 wesc wesc  158 Feb 29 19:53 urls.py
-rw-r--r-- 1 wesc wesc  647 Jan 12  2011 views.py

./ch11/mysite/blog/templates:
total 4
-rw-r--r-- 1 wesc wesc 696 Dec 19  2010 archive.html

./ch12:
total 24
-rw-r--r-- 1 wesc wesc 174 Feb 29 01:45 app.yaml-default
-rw-r--r-- 1 wesc wesc 195 Feb 29 01:45 app.yaml-py27
-rw-r--r-- 1 wesc wesc 361 Feb 29 01:47 main.py-clean
-rw-r--r-- 1 wesc wesc 398 Feb 29 01:45 main.py-default
-rw-r--r-- 1 wesc wesc 374 Dec 13 13:04 main.py-py27
-rw-r--r-- 1 wesc wesc 483 Feb 29 01:49 README.html

./ch13:
total 20
-rw-r--r-- 1 wesc wesc  272 Feb 29 22:05 README.html
-rwxr-xr-x 1 wesc wesc  520 Feb 28 02:37 stock3.py
-rwxr-xr-x 1 wesc wesc  485 Feb 28 02:36 stock.py
-rwxr-xr-x 1 wesc wesc 5970 Feb 28 02:37 twapi.py

./ch14:
total 28
-rwxr-xr-x 1 wesc wesc  633 Feb 27 15:15 csvex.py
-rwxr-xr-x 1 wesc wesc  755 Feb 27 15:15 dict2json.py
-rwxr-xr-x 1 wesc wesc 1176 Feb 27 15:15 dict2xml.py
-rwxr-xr-x 1 wesc wesc 1367 Feb 27 15:15 goognewsrss.py
-rw-r--r-- 1 wesc wesc  338 Feb 29 01:50 README.html
-rwxr-xr-x 1 wesc wesc  762 Feb 27 15:15 xmlrpcclnt.py
-rwxr-xr-x 1 wesc wesc 1585 Feb 27 15:16 xmlrpcsrvr.py

./ch15:
total 20
-rwxr-xr-x 1 wesc wesc 4126 Feb 28 02:45 plus_top_posts.py
-rw-r--r-- 1 wesc wesc  288 Feb 29 01:50 README.html
-rw-r--r-- 1 wesc wesc 1095 Sep 20  2006 swhello.java
-rwxr-xr-x 1 wesc wesc  477 Sep 20  2006 swhello.py
</pre>
